import org.junit.Test;

public class MyTest {
/*     public boolean circularArrayLoop(int[] nums) {
        int fast=0,slow=0;
        do{
            fast=next(fast, nums);
            fast=next(fast, nums);
            slow=next(slow, nums);
        }while(fast!=slow);
        if(slow==next(slow, nums)){
            return false;
        }
        int start=slow;
        slow=next(slow, nums);
        while(slow!=start){
            if(nums[slow]*nums[next(slow, nums)]<0){
                return false;
            }
            slow=next(slow, nums);
        }
        return true;
    }
    private int next(int curr,int[] nums){
        int n = nums.length;
        return ((curr + nums[curr]) % n + n) % n;
    } */

    public boolean circularArrayLoop(int[] nums) {
        int n = nums.length;
        for (int i = 0; i < n; i++) {
            if (nums[i] == 0) {
                continue;
            }
            int slow = i, fast = next(nums, i);
            // 判断非零且方向相同
            while (nums[slow] * nums[fast] > 0 && nums[slow] * nums[next(nums, fast)] > 0) {
                if (slow == fast) {
                    if (slow != next(nums, slow)) {
                        return true;
                    } else {
                        break;
                    }
                }
                slow = next(nums, slow);
                fast = next(nums, next(nums, fast));
            }
            int add = i;
            while (nums[add] * nums[next(nums, add)] > 0) {
                int tmp = add;
                add = next(nums, add);
                nums[tmp] = 0;
            }
        }
        return false;
    }
    public int next(int[] nums, int cur) {
        int n = nums.length;
        return ((cur + nums[cur]) % n + n) % n; // 保证返回值在 [0,n) 中
    }
    @Test
    public void test(){
        int[] nums={3,1,2};
        System.out.println(circularArrayLoop(nums));
        System.out.println("hello");
    }
    
}
